QPixmap依赖于硬件,QImage不依赖于硬件。QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的。 当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制。QPixmap绘制效果是最好的。
QIcon testIcon("\\blankProject\\temp.bmp");->setIcon(testIcon);->setIcon(QIcon("\\blankProject\\temp.bmp"));->setIconSize(QSize(200,200));
setIconSize():设置图标大小,参数是QSize类型
QPixmap dlg(":/picture/dialog.png");->setFixedSize(dlg.size());->setPixmap(dlg);dlg.size():获取图片的大小,返回的是QSize类型
QPixmap objPixmap;objPixmap.load(imgfile);//加载图片->setIcon(QIcon(objPixmap.scaled(QSize(100,100))));QPixmap::scaled() 根据给定的尺寸来放大缩小QPixmap
QIcon 类代表图标,实现在 QtGui 共享库中。QIcon 对象可以认为是一系列图像的组合,每个图像代表窗口在某种状态下应该1显示的图标。
QIcon();// 构造一个空图像构成的图标 QIcon(const QPixmap &pixmap); // 从 Pixmap 对象构造函数 QIcon(const QString &filename); // 从图像文件构造图标当从 QPixmap 对象构造图标时,系统会自动产生窗口不同状态下对应的图像,比如窗口在禁用状态下其图标为灰色。从文件构造图标时,文件并不是立刻加载,而是当图标要显示时才加载。添加图像 下面的成员函数可以从图像文件中向 QIcon 对象添加图像:
void addFile(const QString &filename, const QSize &size = QSize(), Mode mode = Normal, State state = Off);其中各个参数的含义解释如下。 1)filename:文件名。 2)size:指定大小。 3)mode:指定使用模式,即窗口在何种状态下使用这个图像。 4)state:指定使用状态。 Mode 为 QIcon 类的成员类型,有以下取值。 1)QIcon::Normal:窗口为使能状态,但未激活。 2)QIcon::Disabled:窗口为禁用状态。 3)QIcon::Active:窗口为激活状态。 4)QIcon::Selected:窗口被选中。 当窗口的状态切换时,默认的图标绘制函数会自动根据窗口的状态重绘图标。如果窗口还有所谓的开关状态(比如一个按钮可以有按下和弹起两个状态),则还可以根据 state 参数来选择不同的图像。state 参数为 State 类型,这也是一个 QIcon 类的成员类型,它有以下取值。 QIcon::Off:窗口在关状态。 QIcon::On:窗口在开状态。 另外一个成员函数可以直接将 QPixmap 对象添加到 QIcon 对象中:
void addPixmap(const QPixmap &pixmap, Mode mode = Normal, State state = Off);这里的 pixmap 参数是要添加的 QPixmap 对象,mode 参数和 state 参数的含义与 addFile 函数中相同。
获取图像 下面的成员函数可以获取 QIcon 对象中的图像
QPixmap pixmap(const QSize &size, Mode mode = Normal, State state = Off) const;其中参数 size 是指定的大小,参数 mode 和 state 则是使用模式和状态。这个函数还有以下重载版本:
QPixmap pixmap(int w, int h, Mode mode = Normal, State state = Off) const; QPixmap pixmap(int extent, Mode mode = Normal, State state = Off) const;它们分别等价于以下的函数调用: 注意返回的图像大小可能比指定的小,但不会比指定的大。
判断 以下成员函数可以判断 QIcon 对象是否为空图像构成的图标:
bool isNull() const; // 判断是否为空图像构成的图标问题:
QPixmap p;p.load("1.png");label->setPixmap(p);p.load("2.png");label->setPixmap(p);p.load("1.png");label->setPixmap(p);当用同一个p, 即全局变量时,你加载图片1,显示图片1;再加载图片2,显示图片2;可当你再想变回图片一时,你再加载图片一,不好使了,变不回来了,还是显示图片二,你在加载个图片三,好使,再想变回图片二,不好使了。。。。。。
这是为神马呢???
原来,p.load()是将图片加载到缓冲区中:QPixmapCache,当你加载图片二是,图片一并没有被覆盖,此时缓冲区内有图片一和图片二,当你再次加载图片一时,以为缓冲区里应经有了,所以p.load(),直接返回true;但是图片仍是图片二,所以不能显示回图片一!
解决办法很简单,有三种办法:
一、 直接定义局部变量,这样每次都是新的缓冲区;
二、 当再次加载图片时,先将缓冲区清空, QPixmapCache::clear();然后再加载;
三、 在初始化函数里写:QPixmapCache::setCacheLimit(1);设置缓冲区内只能放一张图片,这样就会替换原来的